package br.edu.faculdadeprojecao.DAO;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.edu.faculdadeprojecao.infra.JPAUtil;
import br.edu.faculdadeprojecao.modelo.Aula;
import br.edu.faculdadeprojecao.modelo.Professor;
import br.edu.faculdadeprojecao.modelo.Unidade;

public final class UnidadeDAO extends GenericDAO {

	public void delete(Unidade unidade) {

		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		try {
			// System.out.println(u.getId());
			em.remove(em.find(Unidade.class, unidade.getId()));
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
			System.out.println("Nao excluiu!!");
		} finally {
			em.close();
		}
	}

	public Unidade buscaPorID(Integer id) {

		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();
		Unidade unidade = em.getReference(Unidade.class, id);
		em.close();

		return unidade;
	}

	public List<Unidade> unidadePorAula(Aula aula) {

		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		Query query = em
				.createQuery("select u from Unidade u where u.disponibilidadeaula.aula =:aula order by u.nome asc");
		query.setParameter("aula", aula);
		@SuppressWarnings("unchecked")
		List<Unidade> list = query.getResultList();

		em.close();

		return list;
	}

	public List<Unidade> listaUnidades() {

		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		Query query = em
				.createQuery("select u from Unidade u order by u.nome asc");

		@SuppressWarnings("unchecked")
		List<Unidade> list = query.getResultList();

		em.close();

		return list;
	}

	public Unidade buscaPorNome(String nome) {
		EntityManager em = new JPAUtil().getEntityManager();
		String jpql = "select u from Unidade u where u.nome=:nome";
		Query query = em.createQuery(jpql);
		query.setParameter("nome", nome);

		Unidade unidade = (Unidade) query.getSingleResult();
		em.close();
		return unidade;
	}

}